public class Main {
    //晨跑问题
    //小蓝每个周六周天进行晨跑
    //每个月的1,11,21，31号也进行晨跑
    //已知2022.1.1这一天是周六
    //求2022年这一年小蓝晨跑了多少天
    public static void main1(String[] args) {
        int[] ds = {0,31,28,31,30,31,30,31,31,30,31,30,31};
        int Z = 6;
        int count = 0;
        for (int y = 2022; y <=2022 ; y++) {//枚举年
            for (int m = 1; m <= 12; m++) {//枚举月
                int D = ds[m];
                //判断是否为闰年
                if(m == 2){
                    if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0){
                        D = 29;
                    }
                }
                for (int d = 1; d <= D; d++) {//枚举日
                    if(d % 10 == 1){
                        count++;
                    }else if(Z == 6 || Z == 0){
                        count++;
                    }
                    Z = Z + 1;
//                    if(Z == 7) Z = 0;
                    Z = Z % 7;

                }
            }
        }
        System.out.println(count);
    }

    public static void main2(String[] args) {
        //先创建一个 count 来记录幸运数的个数
        //遍历 1 ~ 100000000
        //将数字转化为字符串，得出字符串的长度
        //判断长度是否为偶数，若 len % 2 == 1，则直接 continue
        //给定一个常数，以便于新创建一个数组
        //然后取出每一位的数，依次赋值到位置
        //遍历求出前 len / 2 的数之和，遍历求出后 len / 2 的数之和
        // if(L == R) count += 1;

        int count = 0;
        for (int i = 10; i < 100000000; i++) {
            int len = ("" + i).length();
            if(len % 2 == 1) continue;
            int N = 10;
            int[] num = new int[N];
            int x = i;
            int n = len;
            while(x > 0){
                num[n--] = x % 10;
                x /= 10;
            }
            int L = 0;
            for (int j = 0; j < len / 2; j++) {
                L += num[j];
            }
            int R = 0;
            for (int j = len / 2; j < len; j++) {
                R += num[j];
            }
            if(L == R){
                count++;
            }
        }

        System.out.println(count);
    }



    public static void main3(String[] args) {
        int res = 0;
        // 枚举 1 ~ 100000000
        for (int i = 10; i < 100000000; i++) {
            // 转换为字符串, 得出该数的长度
            int len = ("" + i).length();
            // 判断长度是否是偶数
            if (len % 2 == 1) continue;

            int N = 10;
            int[] num = new int[N];
            int x = i;
            int n = len;
            // 取出每一位置的数
            while(x > 0) {
                // 取出尾数, 赋值到当前位置
                num[n--] = x % 10;
                // 该数向后移动一位
                x /= 10;
            }
            // L 代表左半部分的和, R 代表右半部分的和
            int L = 0, R = 0;
            for (int j = 1; j <= len / 2; j++) L += num[j];
            for (int j = len / 2 + 1; j <= len; j++) R += num[j];
            if (L == R) res++;
        }
        System.out.println(res);
    }


    //2024的二进制中有几个1

    //将2024这个十进制转化为二进制
    //十进制转化为 n 进制
    public static void main(String[] args) {
        int count = 0;
        int[] num = new int[11];
        int[] newNum = change(num,2,2024);
        for (int i = 0; i < newNum.length; i++) {
            if(newNum[i] == 1){
                count++;
            }
        }
        System.out.println(count);
    }

    private static int[] change(int[] num, int n, int x) {
        int len = 0;
        while(x > 0){
            num[len++] = x % n;
            x /= n;
        }
        return num;
    }

}
